package cn.yangsen.simplebeanmanager.engine;

import java.lang.reflect.Field;
import java.util.Date;
import java.util.Map;
import java.util.Set;

import cn.yangsen.simplebeanmanager.annotation.级联;
import cn.yangsen.simplebeanmanager.bean.html.Element;
import cn.yangsen.simplebeanmanager.bean.html.Label;
import cn.yangsen.simplebeanmanager.tool.ReflectTool;

public class 标题栏生成器 extends 生成器
{
	public 标题栏生成器(Map<Class<?>, Integer> 防死循环集合)
	{
		this.已处理类记录 = 防死循环集合;
	}

	private Element[] 根据注解获取(Field 属性)
	{
		return new Element[]
			{ new Label(根据注解获取描述(属性)) };
	}

	@Override
	protected Element[] 处理Boolean属性值(Field 属性, Boolean 值)
	{
		return 根据注解获取(属性);
	}

	@Override
	protected Element[] 处理Int属性值(Field 属性, Integer 值)
	{
		return 根据注解获取(属性);
	}
	
	@Override
	protected Element[] 处理Long属性值(Field 属性, Long 值)
	{
		return 根据注解获取(属性);
	}
	
	@Override
	protected Element[] 处理Float属性值(Field 属性, Float 值)
	{
		return 根据注解获取(属性);
	}

	@Override
	protected Element[] 处理String属性值(Field 属性, Object 值)
	{
		return 根据注解获取(属性);
	}
	
	@Override
	protected Element[] 处理日期属性值(Field 属性, Date 值)
	{
		return 根据注解获取(属性);
	}

	@Override
	protected Element[] 处理Enum属性值(Field 属性, Object 值)
	{
		return 根据注解获取(属性);
	}
	
	@Override
	protected <T> Element[] 处理Iterable属性值(Field 属性, Iterable<? extends T> 值, Class<? extends T> 实际类型)
	{
		return 根据注解获取(属性);
	}

	@Override
	protected Element[] 处理Abstract属性值(Field 属性, Object 值)
	{
		return 根据注解获取(属性);
	}

	@Override
	protected Element[] 处理Id注解的属性值(Object 对象, Field 属性)
	{
		return 根据注解获取(属性);
	}

	@Override
	protected Element[] 处理Entity注解的属性值(Field 属性, Object 值)
	{
		return 根据注解获取(属性);
	}

	@Override
	protected Element[] 处理AsA注解的属性值(Object 对象, Field 属性)
	{
		return 根据注解获取(属性);
	}

	@Override
	protected Element[] 处理Rely注解的属性值(Object 对象, Field 属性)
	{
		return 根据注解获取(属性);
	}

	@Override
	protected Element[] 处理限定范围的属性值(Object 对象, Field 属性)
	{
		return 根据注解获取(属性);
	}

	@Override
	protected Element[][] 处理级联属性(Field 属性, Object 对象, Set<Field> 已被级联处理的属性)
	{
		级联 级联 = 属性.getAnnotation(级联.class);
		Field 被控制属性 = null;
		if (级联 != null)
		{
			String 被控制的属性名 = 级联.control();
			被控制属性 = ReflectTool.获取对象的属性(属性.getDeclaringClass(), 被控制的属性名);
		}
		return new Element[][]
			{ 根据注解获取(属性), 根据注解获取(被控制属性) };
	}
}
